package top.kaoshanji.p2ch23a;

import java.lang.reflect.Proxy;

/**
 * 代码清单-p2ch23a-579页a：使用Java SDK实现动态代理示例
 * author kaoshanji
 * ^_^
 * create time 2025/3/3 9:24
 */
public class TraceJDKDynamicProxyDemo {

    public static void main(String[] args) {

        IService realService = new RealService();

        // 这是个对象，这是个对象，这是个对象
        // loader 表示类加载器
        // interfaces 表示代理类要实现的接口列表，是一个数组，元素的类型只能是接口，不能是普通的类
        // h 的类型为 InvocationHandler，它是一个接口，也定义在 java.lang.reflect 包中，它只定义了一个方法 invoke，对代理接口所有方法的调用都会转给该方法
        // 它是一个
        IService proxyService = (IService)Proxy.newProxyInstance(IService.class.getClassLoader(), new Class[]{IService.class},
                new TraceJDKDynamicInvocationHandler(realService));

        proxyService.sayHello();

    }

}
